/*
** $ 身份：嘞函.h $
** 辅助函数来操纵原型和闭包
** 请参见炉啊.h中的版权声明
*
** 本人所用声母表: a啊 b哔 c西 d迪 e鹅 f弗 g哥 
* h喝 i艾 j鸡 k颗 l嘞 m摸 n恩
* o欧 p匹 q气 r日 s丝 t嚏 
* u由 v微 w屋 x斯 y医 z只
*
* 一些英文单词缩写,我的翻译大多来自;有道词典,谷歌翻译,百度.
* 一些术语实在不好翻译,所以就原封不动.
* 
* 
*/

#ifndef 嘞函_喝
#define 嘞函_喝


#include "嘞对象.h"

#define 大小西闭包(恩)	(cast_int(offsetof(西闭包, 上值)) + \
                         cast_int(sizeof(嚏值)) * (恩))

#define 大小嘞闭包(恩)	(cast_int(offsetof(嘞闭包, 上值)) + \
                         cast_int(sizeof(嚏值 *)) * (恩))

/* 测试线程是否在 "嚏屋上丝" 列表中 */
#define 是否嚏屋上丝内(嘞)	(嘞->嚏屋上丝 != 嘞)


/*
** 闭包中的最大上值数量（C和Lua）。 （值
** 必须包含在虚拟机器寄存器内。）
*/
#define 最大上值	255

#define 上是否开(上)	((上)->微 != &(上)->由.值)

#define 上等级(上)	检查_表达式(上是否开(上), 投(丝嚏颗身份, (上)->微))

/*
** 在放弃关闭缓存之前的最大未命中数
** 原型中
*/
#define 最大命中		10

/*
** '炉啊弗_关闭' 的特殊 "状态"
*/
/* 在不运行其关闭方法的情况下关闭上值 */
#define 不关闭方法	(-1)

/* 在保护模式下运行所有关闭方法的关闭上值 */
#define 关闭保护模式	(-2)


炉啊艾_函 原型 *炉啊弗_新原型 (炉啊_国 *嘞);
炉啊艾_函 西闭包 *炉啊弗_新西闭包 (炉啊_国 *嘞, int 恩上值);
炉啊艾_函 嘞闭包 *炉啊弗_新嘞闭包 (炉啊_国 *嘞, int 恩上值);
炉啊艾_函 void 炉啊弗_初始上值 (炉啊_国 *嘞, 嘞闭包 *西嘞);
炉啊艾_函 上值 *炉啊弗_找上值 (炉啊_国 *嘞, 丝嚏颗身份 等级);
炉啊艾_函 void 炉啊弗_新待关闭上值 (炉啊_国 *嘞, 丝嚏颗身份 等级);
炉啊艾_函 int 炉啊弗_关闭 (炉啊_国 *嘞, 丝嚏颗身份 等级, int 状态);
炉啊艾_函 void 炉啊弗_非链接上值 (上值 *由微);
炉啊艾_函 void 炉啊弗_自由原型 (炉啊_国 *嘞, 原型 *弗);
炉啊艾_函 const char *炉啊弗_取本地名字 (const 原型 *函, int 本地_号码,
                                         int 匹西);

#endif